spb/autoscholar
Public
1import { publicationDecisions, qualityGateResults, reviewFindings } from "@autoscholar/db";2import { asc, desc, eq } from "drizzle-orm";3import { handler, json } from "@/lib/server/api";4import { db } from "@/lib/server/db";5import { requireAdmin } from "@/lib/server/session";67export const runtime = "nodejs";89export const GET = handler(async (req, { params }) => {10 await requireAdmin(req);11 const { runId } = (await params) as { runId: string };12 const gates = await db()13 .select()14 .from(qualityGateResults)15 .where(eq(qualityGateResults.runId, runId))16 .orderBy(desc(qualityGateResults.createdAt), asc(qualityGateResults.gate));17 const evaluations = [...new Set(gates.map((g) => g.evaluationId))];18 const findings = await db()19 .select()20 .from(reviewFindings)21 .where(eq(reviewFindings.runId, runId))22 .orderBy(asc(reviewFindings.round), asc(reviewFindings.severity));23 const decisions = await db()24 .select()25 .from(publicationDecisions)26 .where(eq(publicationDecisions.runId, runId))27 .orderBy(desc(publicationDecisions.createdAt));28 return json({29 evaluations: evaluations.map((id) => ({30 evaluationId: id,31 gates: gates.filter((g) => g.evaluationId === id),32 })),33 findings,34 decisions,35 });36});37